home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 001-100 / 001-025 / 019 / blackjack / dekmgr.c < prev    next >
C/C++ Source or Header  |  1995-03-17  |  1KB  |  77 lines

  1. /*  DEKMGR.C      deck manager
  2.  */
  3.  
  4. #include "local.h"
  5. #include "bj.h"
  6. #include "dekmgr.h"
  7.  
  8. #define NCARDS (4 * 52)
  9.  
  10. static short deck[NCARDS] = {0};    /* the deck */
  11. static short nc = 0;                /* subscript of next card */
  12. static short shufpt = 0;            /* subscript of shuffle point */
  13.  
  14. /*  deklow  -  is deck at or past shuffle point ?
  15.  */
  16. bool  deklow()
  17. {
  18.    return (shufpt <= nc);
  19. }
  20.  
  21. /* opndck  -  initialize the deck
  22.  */
  23. void  opndek()
  24. {
  25.    short varnum();
  26.    void  shuffl();
  27.    void  srand();
  28.  
  29.    short i;
  30.    short low;
  31.  
  32.    for (low = 0; low < NCARDS; low += 52)
  33.       for (i = 0; i < 52; ++i)
  34.          deck[i + low] = i;
  35.    srand((unsigned)varnum());
  36.    shuffl();
  37. }
  38.  
  39. /* shuffl  -  shuffle the deck
  40.  */
  41. void  shuffl()
  42. {
  43.    short t;             /* temporary for swap */
  44.    short i;             /* index for loop over cards */
  45.    short j;             /* index for swap */
  46.    short nfrom();       /* fn to produce random number */
  47.  
  48.    for (i = 0; i < NCARDS; ++i) {
  49.       j = nfrom(i, NCARDS - 1);
  50.       t = deck[j], deck[j] = deck[i], deck[i] = t;
  51.    }
  52.    shufpt = nfrom(NCARDS - 52, NCARDS - 36);
  53.    nc = 0;
  54.    printf("Shuffle\n");
  55. }
  56.  
  57. /* tkcard  -  take a card
  58.  */
  59. short tkcard()
  60. {
  61.    void  shuffl();
  62.  
  63.    if (NCARDS <= nc) shuffl();
  64.  
  65.    return(deck[nc++]);
  66. }
  67.  
  68. /* varnum  -  returns a varying startoff number
  69.  */
  70. short varnum()
  71. {
  72.    int rand();
  73.  
  74.    return((short)rand());
  75. }
  76.  
  77.